package be.xios.projectquiz.game;

import java.io.Serializable;
/// <summary>
/// Deze klasse is de superklasse waar de andere games van overerven
/// </summary>
/// <author>Sebastian Kubski</author>
@SuppressWarnings("serial")
public abstract class Game implements Serializable {

	private String gameName;
	private int language, rondes, spelers, vragenPerRonde, huidigeRonde=1, huidigeVraag=0;
	private PlayerList playerList = new PlayerList();
	private VragenList vragenList = new VragenList();
	private AntwoordList antwoordList;
	private boolean started=false, ended=false, masterNeeded, masterConnected;

	//Constructor
	public Game(String gameName, int taal, int rondes, int spelers, int vragenPerRonde, boolean masterNeeded) {
		this.gameName=gameName;
		this.language=taal;
		this.rondes=rondes;
		this.spelers=spelers;
		this.vragenPerRonde=vragenPerRonde;
		this.masterNeeded=masterNeeded;
		this.antwoordList = new AntwoordList();
	}
	
	//Getters-Setters
	public String getGameName() {
		return gameName;
	}

	public int getLanguage() {
		return language;
	}

	public void setLanguage(int language) {
		this.language = language;
	}

	public int getSpelers() {
		return spelers;
	}

	public int getRondes() {
		return rondes;
	}
	
	public int getVragenPerRonde() {
		return vragenPerRonde;
	}

	public void setVragenPerRonde(int vragenPerRonde) {
		this.vragenPerRonde = vragenPerRonde;
	}

	public synchronized PlayerList getPlayerList() {
		return playerList;
	}

	public void setPlayerList(PlayerList playerList) {
		this.playerList = playerList;
	}

	public AntwoordList getAntwoordList() {
		return antwoordList;
	}

	public void setAntwoordList(AntwoordList antwoordList) {
		this.antwoordList = antwoordList;
	}

	public VragenList getVragenList() {
		return vragenList;
	}

	public void setVragenList(VragenList vragenList) {
		this.vragenList = vragenList;
	}

	public boolean isStarted() {
		return started;
	}

	public void setStarted(boolean started) {
		this.started = started;
	}
	
	public boolean isEnded() {
		return ended;
	}

	public void setEnded(boolean ended) {
		this.ended = ended;
	}

	public int getHuidigeRonde() {
		return huidigeRonde;
	}

	public void setHuidigeRonde(int huidigeRonde) {
		this.huidigeRonde = huidigeRonde;
	}

	public int getHuidigeVraag() {
		return huidigeVraag;
	}

	public void setHuidigeVraag(int huidigeVraag) {
		this.huidigeVraag = huidigeVraag;
	}
	
	public boolean isMasterConnected() {
		return masterConnected;
	}

	public void setMasterConnected(boolean masterConnected) {
		this.masterConnected = masterConnected;
	}

	public boolean isMasterNeeded() {
		return masterNeeded;
	}

	/// <summary>
	/// Deze method returnt de score in een string
	/// </summary>
	/// <returns> string met score</returns>
	/// <author>Sebastian Kubski</author>
	public String geefTussenstand() {
		String tussenstand="";
		
		for (Player p : playerList) {
			tussenstand += p.getNaam() + " : " + p.getScore() + " - ";
		}
		
		return tussenstand;
	}
	/// <summary>
	/// Deze method haalt de volgende vraag uit de vragenlist
	/// </summary>
	/// <author>Sebastian Kubski</author>
	public Vraag getVolgendeVraag() {
		// Nullpointers in de panel komen van hier
		if (huidigeVraag <(rondes * vragenPerRonde))
			return vragenList.get(huidigeVraag);
		else
			return null;
	}
}
